/**
 * @description User Controller
 */

 const {
  createUser,
  getUserInfo,
  updateUser,
  deleteData,
  queryAll,
  querySome
} = require('../service/user')
const { SuccessModel, ErrorModel } = require('../model/ResModel')
const {
  registerFailInfo,
  queryFailInfo,
} = require('../model/ErrorInfo')

/**
 * 用户注册或登录
 * @param {string} userid 用户ID
 * @param {string} nikename 昵称
 * @param {string} city 城市
 * @param {string} avatar 头像
 */
async function login({ username, password, isAdmin }) {
  const userInfo = await getUserInfo(username)
  console.log('userInfo', userInfo)
  if (userInfo) {
    // 查看密码是否一致
    if (password === userInfo.password) {
      if (isAdmin === userInfo.admin) {
        return new SuccessModel(userInfo)
      } else {
        console.log(isAdmin === 'true')
        if (isAdmin === 'true') {
          return new ErrorModel({
            code: 500,
            msg: '您不是管理员'
          })
        } else {
          return new ErrorModel({
            code: 500,
            msg: '您是管理员,请选择管理员'
          })
        }
      }
    } else {
      return new ErrorModel({
        code: 500,
        msg: '密码不正确'
      })
    }
  } else {
    return new ErrorModel({
      code: 500,
      msg: '账号不存在'
    })
  }
}

async function register({username, password, admin}) {
  const userObj = {
    username,
    password,
    admin
  }
  console.log('userObj', userObj)
  const userInfo = await getUserInfo(username)
  if (userInfo) {
    return new ErrorModel({
      code: 500,
      msg: '账号已存在'
    })
  }
  try {
    await createUser(userObj)
    return new SuccessModel(userObj)
  } catch (ex) {
    return new ErrorModel(registerFailInfo)
  }
}

/**
 * 查询所有用户（支持条件查询和模糊查询）
 * @param {string} nikename 用户昵称 
 * @param {string} userid 用户id 
 * @param {number} page 当前页码
 * @param {number} pageSize 每页条数 
 * @returns 
 */
async function queryAllUser({ nikename, userid, page, pageSize }) {
  try {
    const result = await queryAll({ nikename, userid, page, pageSize })
    return new SuccessModel(result)
  } catch (ex) {
    console.error(ex.message, ex.stack)
    return new ErrorModel(queryFailInfo)
  }
}

/**
 * 修改用户信息
 * @param {object} updateInfo 要修改的信息
 * @param {objcet} whereInfo 查询条件
 */
async function updateUserInfo(params, id) {
  try {
    await updateUser(params, id)
    return new SuccessModel(params)
  } catch (ex) {
    return new ErrorModel({})
  }
}
/**
 * 删除
 */
 async function deleteUser(id) {
  try {
    await deleteData(id)
    return new SuccessModel({
      msg: '删除成功'
    })
  } catch (ex) {
    return new ErrorModel({})
  }
}

/**
 * 查询所有信息
 */
 async function querySomeData(params) {
  try {
    console.log(params)
    const result = await querySome(params)
    return new SuccessModel(result)
  } catch (ex) {
    return new ErrorModel(queryFailInfo)
  }
}

module.exports = {
  login,
  register,
  queryAllUser,
  updateUserInfo,
  deleteUser,
  querySomeData
}
